package org.example.validation;


import java.util.ArrayList;
import java.util.List;

//校验链 也就是校验器的集合
//目标： 希望校验链校验 而不是放在外面
public class ValidatorChain {

    private final List<ValidatorHandler> validators = new ArrayList<>();

    //校验链上下文
    private final ValidatorContext context = new ValidatorContext();

    public void addHandler(ValidatorHandler handler) {
        this.validators.add(handler);
    }



    //定义的是我预判他可能抛出的异常
    //改进：要把所有不符合的都提醒出来 所以不能急着抛异常
    void validate(Object value) {
        context.setValue(value);
        while (true){
            int index = context.currentIndex();
            if (index >= validators.size()){
                break;
            }
            ValidatorHandler handler = validators.get(index);
            handler.validate(context.getValue(), context);
            //这里 要在每个校验器中手动控制是否下一个 不然 就不往下走  其实就是doNext来记录信息
            if(index==context.currentIndex()){
                break;
            }
        }

    }


}
